package com.hxkj.mapper;

import com.hxkj.domain.po.AuthFunction;
import com.hxkj.domain.po.AuthRole;
import com.hxkj.domain.po.AuthUser;
import com.hxkj.domain.po.Site;
import com.platform.common.domain.annotation.EnableDataSource;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户mapper
 * <p>
 * Created by chenwei on 2018/5/15.
 */
@Repository
public interface UserMapper {

    /**
     * 根据account获得用户
     * @param account
     * @return
     */
    @EnableDataSource("slave")
    AuthUser findByAccount(String account);

    /**
     * 根据账号获取角色码集合
     * @param account
     * @return
     * @throws Exception
     */
    @EnableDataSource("slave")
    Set<String> findRolesByAccount(String account) throws Exception;
    /**
     * 根据账号获取功能码集合
     * @param account
     * @return
     * @throws Exception
     */
    @EnableDataSource("slave")
    Set<String> findPermissionsByAccount(String account) throws Exception;

    /**
     * 根据账号获取角色
     * @param authUser
     * @return
     */
    AuthRole getRoleByAccount(AuthUser authUser);

     /**
     * 根据appkey查找所有funciton
     *
     * @param appKey
     * @return
     */
    List<AuthFunction> getFunctionsByAppKey(String appKey);

    /**
     * 根据appkey查找所有funciton
     *
     * @param map <String,appCode> <string,account>
     * @return
     */
    List<AuthFunction> getFunctionsByAccount(Map<String, String> map);

    /**
     * 根据role查找所有funciton
     *
     * @param map <String,appCode> <string,account>
     * @return
     */
    List<AuthFunction> getFunctionsByRole(Map<String, Object> map);

    /**
     * 根据appCode functionId
     *  @param map <String,appCode> <Long,functionId>
     * @return
     */
    AuthFunction getOneFunction(Map<String, Object> map);


    /**
     * 根据角色获取功能
     * @param roleId
     * @return
     */
    List<AuthFunction> findFunctionByRoleId(Long roleId);



    /**
     * 通过account和appkey获得
     * @param map appCode account
     * @return
     */
    List<AuthRole>getRolesByAccount(Map<String, String> map);

    /**
     * 根据appKey验证角色是否属于该app
     * @param map appCode roleId
     * @return
     */
    AuthRole getOneRole(Map<String, Object> map);



    /**
     * 根据账号和appKey查找菜单集合
     * @param map
     * @return
     */
    List<AuthFunction> findFunctions(Map<String, String> map);


    /**
     * 根据账户获取站点
     * @param account
     * @return
     */
    List<Site> getUserSiteByAccount(String account);


    /**
     * 通过站点id获取功能
     * @param siteId
     * @return
     */
    List<AuthFunction> findAllFunctionsBySite(Long siteId);


    /**
     * 根据站点获取权限
     * @param siteId
     * @return
     */
    Set<String> findPermissionsBySite(Long siteId);


}
